package yz.com.javautil.dijkstrautil;

/**
 * Dijkstra算法图结构
 * 参考资料：https://blog.csdn.net/m0_50913327/article/details/125099211
 *
 * @author csdn
 */
public interface DijkstraGraph<V> {
    /**
     * 边数量
     *
     * @return 边数量
     */
    int edgesSize();

    /**
     * 顶点数量
     *
     * @return 顶点数量
     */
    int verticesSize();

    /**
     * 增加一个顶点
     *
     * @param v 顶点数据
     */
    void addVertex(V v);

    /**
     * 增加一条边（默认权值1）
     *
     * @param from 起点
     * @param to   终点
     */
    void addEdge(V from, V to);

    /**
     * 增加一条带权值的边
     *
     * @param from   起点
     * @param to     终点
     * @param weight 权值
     */
    void addEdge(V from, V to, int weight);

    /**
     * 删除一条边
     *
     * @param from 起点
     * @param to   终点
     */
    void removeEdge(V from, V to);

    /**
     * 删除某个顶点
     *
     * @param v 被删除顶点的序号
     */
    void removeVertex(V v);

    /**
     * 显示一个图
     */
    void displayGraph();

    /**
     * 返回顶点v的度
     *
     * @param v 顶点的序号
     * @return 度
     */
    int degree(V v);

    /**
     * 深度优先遍历
     */
    void dfs();

    /**
     * 宽度优先遍历
     */
    void bfs();

}
